// //分割回文字符串
// /**
//  * @param {string} s
//  * @return {string[][]}
//  */
//  var partition = function (s) {
//     const res = [];
//     const memo = new Array(s.length);
//     for (let i = 0; i < memo.length; i++) {
//         memo[i] = new Array(s.length);
//     }
  
//     function dfs(temp, start) {
//         if (start == s.length) {
//             res.push(temp.slice());
//             return;
//         }
//         for (let i = start; i < s.length; i++) {
//             if (memo[start][i] === false) {
//                 continue
//             }
//             if (memo[start][i] || isPali(s, start, i, memo)) {
//                 temp.push(s.substring(start, i + 1));
//                 dfs(temp, i + 1);
//                 temp.pop();
//             }
//         }
//     }
//     dfs([], 0);
//     return res;
// };

// function isPali(s, l, r, memo) {
//     while (l < r) {
//         if (s[l] != s[r]) {
//             memo[l][r] = false;
//             return false;
//         }
//         l++;
//         r--;
//     }
//     memo[l][r] = true;
//     return true;
// }
var partition = function(s) {
    const isPalindrome = (str,start,end) => {
        for(let i = start,j = end;i<j;i++,j--) {
            if(str[i]!==str[j]) {
                return false
            }
        }
        return true;
    }
    const ans = [];const res = [];
    const back = (index) => {
      if(index>=s.length) {
          ans.push([...res])
      }
      const n = s.length;
      for(let i = index; i <n; i++) {
          if(isPalindrome(s,index,i)) {
             let part = s.substr(index,i-index+1)
              res.push(part)
          }
          else {
              continue;
          }
          back(i+1);
          console.log(res,1)
          res.pop();
          console.log(res,2)
      }
 }
    back(0);
    return ans;
};
console.log(partition("aab"))